/**
* @file drv_timer.h
* @brief  timer application
* @details 
* @author huangbin
* @version V1.0.0
* @date 2025-04-20
* @copyright All documents are copyrighted by Shenzhen Xinlongwei Technology Co., LTD.
*            They may not be used for commercial purposes without permission
*/
#ifndef __DRV_TIMER_H__
#define	__DRV_TIMER_H__
#include "inc.h"

#ifdef __cplusplus
 extern "C" {
#endif /* __cplusplus */
////////////////////////////////////////////////////////////////////////////////////
     

/**
* @brief 超时定时器list
* @details 用户只可以使用不大于TIMEOUT_MAX的定时器
*/
typedef void (* fpTimeout)(void);		///<超时回调函数

typedef enum {
	TIMEOUT_1,
	TIMEOUT_2,
	TIMEOUT_3,
	TIMEOUT_4,
	TIMEOUT_5,
	TIMEOUT_MAX, ///<最大16个
}TIMEOUT_LIST;
/**
* @brief 超时定时器数据结构
* @details 管理超时定时器
*/
typedef	struct timeout {
	fpTimeout		pfCallback[TIMEOUT_MAX];
	uint16_t		uTime[TIMEOUT_MAX];
	uint16_t		uTimeRemaind[TIMEOUT_MAX];
	uint16_t		uTimerEn;
}TIMEOUT_TIMER;

/**
* @brief Timer2初始化函数
*/ 
extern void Timer2Init(void);
/**
* @brief Timer3初始化函数
*/ 
extern void Timer3Init(void);

/**
* @brief 使能超时定时器
* @param[in] nTimer 哪一个超时定时器(TIMEOUT_LIST类型)
* @param[in] ms 超时时间，单位ms
* @param[in] pfTimeout 超时回调函数
*/ 
extern void TimeOutEnable(TIMEOUT_LIST nTimer, uint16_t ms,fpTimeout pfTimeout);

/**
* @brief 软件超时定时器初始化
*/ 
extern void TimeOutInit(void);

/**
* @brief 复位超时定时器
* @param[in] nTimer 哪一个超时定时器(TIMEOUT_LIST类型)
*/ 
extern void TimeOutReset(TIMEOUT_LIST nTimer);
	
/**
* @brief 关闭超时定时器
* @param[in] nTimer 哪一个超时定时器(TIMEOUT_LIST类型)
*/     
extern void TimeOutDisable(TIMEOUT_LIST nTimer);
	
///////////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif
/************************END OF FILE*********************************************/
